package thread;

/**
 * 守护线程
 * 守护线程也称为"后台线程",他是通过普通线程调用方法:setDaemon(true)设置
 * 而来的,因此创建时与普通线程无差别
 * 守护线程与普通线程最大的区别在于一个时机:进程结束
 *
 * 当一个java进程中的所有普通线程都结束时,该进程就会结束,此时他会杀掉所有正
 * 在执行的守护线程
 *
 * @author Luka
 * @date 2021/06/04 09:33
 **/
public class DaemonThreadDemo {
    public static void main(String[] args) {
        Thread rose = new Thread(){
            public void run(){
                for (int i = 0; i < 5; i++) {
                    System.out.println("rose:let me go!");
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                System.out.println("扑通!rose:我死啦");
            }
        };

        Thread jack = new Thread(){
            public void run(){
                while (true) {
                    System.out.println("jack:u jump,i jump!");
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        };
        rose.start();
        /*
            设置守护线程的工作必须在线程start方法调用之前进行
         */
        jack.setDaemon(true);
        jack.start();

        /*
            主线程也是普通线程,如果扑通线程执行下面的死循环一位置主线程不会
            结束,那么线程就不会结束,因此所有运行的守护线程也不会被杀掉
         */
        while (true);
    }
}